
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * VERSAO 1.7.0
 * Lexico: tokenizador, tabela de palavras reservadas
 * Sintatico: leitor de automato, submaquina Programa, Funcao (esboço)
 * RTE: empilha, desempilha, le array e grava array
 * 
 * CHANGELOG
 * VERSAO 1.7.0
 * Sintatico: corrigido bug: metodo de superclasse enxerga propria variavel estatica, e nao a da subclasse (mesmo que chamado por objeto da subclasse)
 *            solucao: instanciar as tabelas como nao-static, a cada instanciacao de sub-maquina!
 * Sintatico: retorno de SM agora é Atomo, para permitir que SMs como Comandos saibam que chegaram ao fim ao ler atomo improprio (e retornar este atomo para ser tratado pela SM chamadora)
 * Sintatico: implementadas: SM Comandos e SM IF. Faltam ainda chamadas semanticas e SM Condicao.
 * VERSAO 1.6.2
 * Main: verifica se programa rodou e chama montador MVN
 * Main/Sintatico: Sintatico.run() agora publico e chamado pela main, nao pelo contrutor
 * RTE: funcoes empilha, desempilha, le array e grava array
 * VERSAO 1.6.1
 * Lexico: corrigido bug: comentario de linha na ultima linha nao previsto
 * Lexico: funcao getPosicaoCodigo()
 * Sintatico: mostra atomos esperados e posicao no codigo, em caso de erro sintatico
 * VERSAO 1.6
 * SubMaquinas: agora em OOP! Não perca, compre ja!
 * SubMaquinas: correção/finalizacao das chamadas de SM: rotinas de verificacao, etc
 * Transicao como classe separada
 * VERSAO 1.5.1
 * Transicao como inner class
 * GeracaoDeCodigo iniciado
 * 
 * TODO:
 * 
 * Lexico: tabela de simbolos
 * Lexico: tabela de tipos novos
 *
 * Sintatico: submaquinas restantes
 * Sintatico: instanciacao de submaquinas: usar construtor, e nao classe:
 *            passar CarriedToken pelo construtor
 *            passar contexto (escopo)
 * 
 * Sintatico/Transicao: incluir chamadas ao Semantico (aumentar Transicao???)
 * 
 * Semantico: tudo
 * geracao de codigo
 */


package compilador;

import compilador.AnalisadorSintatico.Sintatico;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import mvn.MvnPcs;

/**
 *
 * @author Leles
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        String fileName = "programa.ldp";
        //String fileName = args[0];
        
        //int tmpObj = 1;
        String tempOutputFile = "mvnAsm_";
        String tempOutputFileExtension = ".asm";
        //System.out.println(tempOutputFile);
        
        Sintatico Sint = new Sintatico(fileName, tempOutputFile, tempOutputFileExtension);

        if (Sint.run() == true){
            String [] S = new String [1];
            S[0] = tempOutputFile;
            
            boolean Montar = false;
            if (Montar){
                try {
                    MvnPcs.main(S);
                } catch (IOException ex) {
                    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
        else {
            // Chilicar aqui
        }


        
/* Falta definir a maquina de estados (automato, whatever, q vai ser um metodo dentro da classe Lexico), e chamar esse metodo do Main pra ele ler e devolver o token (através da leitura do charStream e dos estados), e depois jogar esse token no devido lugar dele.
Ok, muito confuso de entender assim né? Mas vou vendo aki e te aviso se sair alguma coisa*/
    }

}
